import Long from "long";

export namespace textUtils {
    const k = 10000;
    const sizes = ['', '万', '亿', '万亿'];

    /**
     * 转中文单位计数
     * @param value 数字
     * @param fixed 保留小数位数
     * @example
     * 12345 = 1.23万
     */
    export function numberToTenThousand(value: number, fixed: number = 2): string {
        if (value < k * 10) {
            return value.toString();
        } else {
            const i = Math.floor(Math.log(value) / Math.log(k));
            return toFixedNoRound(((value / Math.pow(k, i))), fixed) + sizes[i];
        }
    }

    export function longToTenThousand(value: Long, fixed: number = 2): string {
        return numberToTenThousand(value.toNumber(), fixed);
    }

    /**直接截断式处理保留几位小数 */
    function toFixedNoRound(number: number, decimalPlaces: number) {
        // 处理非数字情况
        if (isNaN(number) || number === null) {
            return NaN;
        }

        // 将数字转换为字符串
        const numStr = number.toString();

        // 检查是否是整数
        if (numStr.indexOf('.') === -1) {
            // 如果是整数，直接返回并补零
            return number.toFixed(decimalPlaces);
        }

        // 分割整数和小数部分
        const parts = numStr.split('.');
        const integerPart = parts[0];
        let decimalPart = parts[1];

        // 处理负数
        let sign = '';
        if (integerPart.startsWith('-')) {
            sign = '-';
        }

        // 如果要求的小数位数大于实际小数位数，补零
        if (decimalPart.length < decimalPlaces) {
            return number.toFixed(decimalPlaces);
        }

        // 直接截取所需位数的小数部分
        const truncatedDecimal = decimalPart.substring(0, decimalPlaces);

        // 组合结果
        return sign + integerPart.replace('-', '') + '.' + truncatedDecimal;
    }

}